]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
PopupMenu: propagate all open-state-changed down to PopupMenuSection
authorGiovanni Campagna <gcampagna@src.gnome.org>
Wed, 29 Aug 2012 22:11:05 +0000 (00:11 +0200)
committerGiovanni Campagna <gcampagna@src.gnome.org>
Wed, 29 Aug 2012 23:10:47 +0000 (01:10 +0200)
PopupMenuBase relies on open-state-changed to update the separator
visibility, but PopupMenuSection were only emitting when the parent
closed, so the first time the menu was opened, separator visiblity was
wrong.

https://bugzilla.gnome.org/show_bug.cgi?id=682998

js/ui/popupMenu.js

index 70c4360bdfe7061bb9f6c5a27e7fa83967811ddc..cb3f05d05032c3041d2730f3a97843c32a29e419 100644 (file)
@@ -1052,14 +1052,17 @@ const PopupMenuBase = new Lang.Class({
 
         if (menuItem instanceof PopupMenuSection) {
             this._connectSubMenuSignals(menuItem, menuItem);
-            menuItem._closingId = this.connect('open-state-changed',
+            menuItem._parentOpenStateChangedId = this.connect('open-state-changed',
                 function(self, open) {
-                    if (!open)
-                        menuItem.close(BoxPointer.PopupAnimation.FADE);
+                    if (open)
+                        menuItem.open();
+                    else
+                        menuItem.close();
                 });
             menuItem.connect('destroy', Lang.bind(this, function() {
                 menuItem.disconnect(menuItem._subMenuActivateId);
                 menuItem.disconnect(menuItem._subMenuActiveChangeId);
+                this.disconnect(menuItem._parentOpenStateChangedId);
 
                 this.length--;
             }));
@@ -1440,7 +1443,7 @@ const PopupMenuSection = new Lang.Class({
 
     // deliberately ignore any attempt to open() or close(), but emit the
     // corresponding signal so children can still pick it up
-    open: function(animate) { this.emit('open-state-changed', true); },
+    open: function() { this.emit('open-state-changed', true); },
     close: function() { this.emit('open-state-changed', false); },
 
     destroy: function() {